import request from '@/api/axios'
import { AxiosPromise } from 'axios'
import { DataRes, SeleteData } from '@/api/config'
import { Operation } from '@/components/dTable/dTable'






// 新增，删除，编辑返回
export interface UpdateResType {
  code:number // 请求结果code
  data:null // 没有返回数据
  msg:string // 提示信息
}


export interface GuideItem{
  packageId:number|null //	integer	套餐id
  checkType:number|null, //	integer 检查类型(字典)
  deptId:number|null, //	integer	 科室名称
  deptList:Array<SeleteData>,
  guideName:string,	//string 指引名称
  tips:string, //	string	指引提示
  id:number|null
}
// 单个体检套餐
export interface LeftTableDataType {
  id: number // 此行id
  packageCode: string // 套餐code
  packageName: string // 套餐名称
  tips:string
  isDefault: boolean
  packageGuideList:Array<GuideItem>
  oper?: Array<Operation> // 操作
}
export type LeftTableDataFormType = Partial<LeftTableDataType>

// 获取体检套餐列表返回数据
export interface LeftTableDataListType {
  size:number
  total:number
  records:Array<LeftTableDataType>
}


// 体检套餐列表参数类型
export interface LeftTableParamsType {
  packageName?: string // 套餐名称
  page: number // 表格第几页
  limit: number // 表格每页多少行
}

// 获取体检套餐列表
const getLeftTableData = (params:LeftTableParamsType):AxiosPromise<DataRes<LeftTableDataListType>> => {
  return request({
    url: '/api/package/page',
    method: 'get',
    params
  })
}

// 已选项目组合数据类型
export interface MidTableDataType {
  id:number
  itemGroupCode: string // 项目组合编码
  itemGroupName: string // 项目组合名称
  oper?: Array<Operation> // 操作
}
// 获取已选项目组合数据
const getMidTableData = (id:number):AxiosPromise<DataRes<Array<MidTableDataType>>> => {
  return request({
    url: '/api/package/get/group', // + id,
    method: 'get',
    params:{id}
  })
}

// 可选项目组合数据类型
export interface RightTableDataType {
  id:string
  itemGroupCode: string // 项目组合编码
  itemGroupName: string // 项目组合名称
  oper?: Array<Operation> // 操作
}

export interface RightTableDataListType {
  size:number
  total:number
  records:Array<RightTableDataType>
}

// 可选项目组合搜索参数类型
export interface RightTableParamsType {
  keywords?: string // 搜索检验项目code或name
  id: string // 套餐id
  page: number // 表格第几页
  limit: number // 表格每页多少行
}
// 获取可选项目组合列表
const getRightTableData = (params:RightTableParamsType):AxiosPromise<DataRes<RightTableDataListType>> => {
  return request({
    url: '/api/package/get/group/optional',
    method: 'get',
    params
  })
}

// 新增编辑弹框参数
export interface PackageFormType {
  id?: number // 有id是更新，无id是新增
  packageName: string // 套餐名称
  packageCode: string // 套餐名称
  packagePrice: string // 价格
  gender:number
  minAge:string
  maxAge:string
}
// 新增体检套餐
const savePackage = (data:PackageFormType):AxiosPromise<DataRes<Array<UpdateResType>>> => {
  return request({
    url: '/api/package/save',
    method: 'post',
    data
  })
}

// 删除单个体检套餐
const deleteRow = (id:string):AxiosPromise<DataRes<Array<UpdateResType>>> => {
  return request({
    url: '/api/package/remove/' + id,
    method: 'post'
  })
}

//  添加项目组合到套餐
export interface RemoveItemGroupType {
  packageId:number // 体检套餐id
  itemGroupId:number // 项目组合id
}
// 移除项目组合
const removeInspect = (data:RemoveItemGroupType):AxiosPromise<DataRes<Array<UpdateResType>>> => {
  return request({
    url: '/api/package/remove/group', // + id,
    method: 'post',
    data
  })
}

//  添加项目组合到套餐
export interface AddInspectType {
  packageId:number // 右侧表格添加行id
  itemGroupId:number // 左侧项目选中行id
}
// type AddInspectFormType=Partial<AddInspectType>
// 添加项目组合到套餐
const addInspect = (data:AddInspectType):AxiosPromise<DataRes<Array<UpdateResType>>> => {
  return request({
    url: '/api/package/save/group',
    method: 'post',
    data
  })
}

// 设为默认套餐
const setDefaultPackage = (id:number):AxiosPromise<DataRes<Array<UpdateResType>>> => {
  return request({
    url: '/api/package/default',
    method: 'get',
    params:{id}
  })
}

// 配置引导单
const setGuide = (data:LeftTableDataFormType):AxiosPromise<DataRes<Array<UpdateResType>>> => {
  return request({
    url: '/api/package/guide',
    method: 'post',
    data
  })
}

// 根据体检类型查询科室
const getDept = (params):AxiosPromise<DataRes<Array<any>>> => {
  return request({
    url: '/api/dept/listDeptByCheckType',
    method: 'get',
    params
  })
}

// 根据套餐id查指引单
const getGuide = (packageId):AxiosPromise<DataRes<LeftTableDataFormType>> => {
  return request({
    url: '/api/package/guide/' + packageId,
    method: 'get'
    // params
  })
}





export default {
  getLeftTableData,
  savePackage,
  deleteRow,
  getMidTableData,
  removeInspect,
  addInspect,
  getRightTableData,
  setDefaultPackage,
  setGuide,
  getDept,
  getGuide
}